#ifndef AUGMENTERCOMP_H
#define AUGMENTERCOMP_H

#include "BaseUI.h"

#include <vector>

class QGridLayout;
class QGroupBox;
class QLabel;
class QSpinBox;
class QLCDNumber;
class Joueur;

/**
 * Classe gérant l'augmentation des scores de compétences
 * diverses. Les compétences déjà connues sont lues depuis le joueur
 * donné à la construction. Le nombre de PP à dépenser est aussi lu
 * depuis le joueur. Chaque compétence est ensuite associée à un
 * spinbox, dont les bornes sont la valeur actuelle de la compétence
 * et 20.
 *
 * @author Johan "Solo" Luisier
 */
class AugmenterComp : public BaseUI
{
  Q_OBJECT
 public:
  AugmenterComp(Joueur* j, QWidget *parent = 0);
  AugmenterComp(const AugmenterComp& augComp);
  ~AugmenterComp();
  StatusCode choixFait();
 private:
  /**
   * Pointeur sur le Joueur dont on veut améliorer les compétences.
   */
  Joueur *joueur;
  /**
   * Layout du groupe des étiquettes et spinbox.
   */
  QGridLayout *groupeLayout;
  /**
   * Cadre autour des étiquettes et spinbox.
   */
  QGroupBox *groupe;
  /**
   * Contient les étiquettes (nom des compétences).
   */
  std::vector<QLabel*>   nomComp;
  /**
   * Contient les spinbox, représentant les \e nouvelles valeurs des
   * compétences.
   */
  std::vector<QSpinBox*> valComp;
  /**
   * Affichage du nombre de PP restants.
   */
  QLCDNumber *PP;
  /**
   * Pointeur sur le conteneur des compétences \e originales du PJ.
   */
  const std::vector<unsigned int> *aDeja;
  unsigned int
    aDejaCombien, /**< Taille du conteneur des compétences, càd 2x le
		     nombre de compétences */
    nbrDeja; /**< Nombre de compétences. */
  /**
   * Nombre de PP disponibles.
   */
  int nbrPP;
  void prepareAffichage();
  void prepareBoutons();
 private slots:
  void valeurChange();
  void fermer();
};

#endif // AUGMENTERCOMP_H
